New fires

Kalamthon - California

  • 7/5/18
  • 37,900 acres
In [21]:
# image date 7/11/18 - off nadir = 49
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104001003F0CCB00')
bbox = env.inputs.get('bbox', '-122.63, 41.87, -122.43, 42.02')
#bbox = env.inputs.get('bbox', '-122.622, 41.836, -122.488, 41.925')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-21-78bf895dbdb2> in <module>()
      9 
     10 image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
---> 11 image.plot(w=10, h=10)

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/mixins/geo.pyc in plot(self, spec, **kwargs)
     63                 self._plot(tfm=self.base_layer_match, **kwargs)
     64             else:
---> 65                 self._plot(tfm=getattr(self, spec), **kwargs)
     66 
     67     def _has_token(self, **kwargs):

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/mixins/geo.pyc in _plot(self, tfm, **kwargs)
     77         f, ax1 = plt.subplots(1, figsize=(kwargs.get("w", 10), kwargs.get("h", 10)))
     78         ax1.axis('off')
---> 79         plt.imshow(tfm(**kwargs), interpolation='nearest', cmap=kwargs.get("cmap", None))
     80         plt.show(block=False)
     81 

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/mixins/geo.pyc in rgb(self, **kwargs)
     40         data = self._read(self[use_bands,...], **kwargs)
     41         data = np.rollaxis(data.astype(np.float32), 0, 3)
---> 42         lims = np.percentile(data, kwargs.get("stretch", [2, 98]), axis=(0, 1))
     43         for x in range(len(data[0,0,:])):
     44             top = lims[:,x][1]

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/numpy/lib/function_base.pyc in percentile(a, q, axis, out, overwrite_input, interpolation, keepdims)
   4289     r, k = _ureduce(a, func=_percentile, q=q, axis=axis, out=out,
   4290                     overwrite_input=overwrite_input,
-> 4291                     interpolation=interpolation)
   4292     if keepdims:
   4293         return r.reshape(q.shape + k)

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/numpy/lib/function_base.pyc in _ureduce(a, func, **kwargs)
   4025                 a = a.swapaxes(i, s)
   4026             # merge reduced axis
-> 4027             a = a.reshape(a.shape[:nkeep] + (-1,))
   4028             kwargs['axis'] = -1
   4029         keepdim = tuple(keepdim)

KeyboardInterrupt: 
In [2]:
image = CatalogImage(catalog_id, pansharpen=True, band_type="MS", bbox=map(float, bbox.split(",")))
In [4]:
tiles = []
for x in range(0, image.shape[1], 256):
    for y in range(0,image.shape[2], 256):
        tiles.append(image[:,x:x+256,y:y+256])
In [19]:
import matplotlib.pyplot as plt
plt.imshow(tiles[len(tiles)/2].rgb())
Out[19]:
<matplotlib.image.AxesImage at 0x131941950>
In [20]:
image.ipe.metadata
Out[20]:
{'georef': {u'scaleX': 6.099532878189005e-06,
  u'scaleY': -6.099532878189005e-06,
  u'shearX': 0.0,
  u'shearY': 0.0,
  u'spatialReferenceSystemCode': u'EPSG:4326',
  u'translateX': -122.73110839,
  u'translateY': 42.14505327},
 'image': {u'absoluteCalibrationFactors': [0.0527336],
  u'acquisitionDate': u'2018-07-11T20:04:58.945Z',
  u'bandAliases': [u'P'],
  u'cloudCover': 0.0,
  u'colorInterpretation': u'WORLDVIEW_8_BAND',
  u'dataType': u'FLOAT',
  u'effectiveBandwidths': [0.2896],
  u'groundSampleDistanceMeters': 0.679,
  u'imageBoundsWGS84': u'POLYGON ((-122.73110839 42.14505936953287, -122.26310343132232 42.14505936953287, -122.26310343132232 41.8010213170715, -122.73110839 41.8010213170715, -122.73110839 42.14505936953287))',
  u'imageHeight': 56404,
  u'imageId': u'b939c2f1-94f6-4d06-8e44-5baf7e575d1b',
  u'imageWidth': 76728,
  u'maxTileX': 299,
  u'maxTileY': 220,
  u'maxX': 76727,
  u'maxY': 56402,
  u'minTileX': 0,
  u'minTileY': -1,
  u'minX': 0,
  u'minY': -1,
  u'nativeTileFileFormat': u'PNG',
  u'numBands': 8,
  u'numXTiles': 300,
  u'numYTiles': 222,
  u'offNadirAngle': 49.1,
  u'pniirs': 4.6,
  u'profileName': u'georectified_image',
  u'satAzimuth': 263.0,
  u'satElevation': 34.0,
  u'sensorAlias': u'WV03_P',
  u'sensorName': u'8-band (Coastal, Blue, Green, Yellow, Red, Red-edge, NIR1, NIR2) Multispectral',
  u'sensorPlatformName': u'WV03',
  u'sunAzimuth': 172.9,
  u'sunElevation': 70.0,
  u'tdiLevels': [48.0],
  u'tileBucketName': u'rda-images-1',
  u'tilePartition': u'0000',
  u'tileXOffset': 0,
  u'tileXSize': 256,
  u'tileYOffset': 0,
  u'tileYSize': 256,
  u'vendorDatasetIdentifier': u'LV1B:058199536010_01_P001:104001003F0CCB00:A010010395A4C300',
  u'vendorName': u'DigitalGlobe, Inc.',
  u'version': 1.1},
 'rpcs': None}

Segment tiles

In [ ]:
np.random.seed(0) #keep same colors
cmap = matplotlib.colors.ListedColormap(np.random.rand(256,3))
plt.figure(figsize=(10,10))
plt.imshow(img_segmented, cmap=cmap)
print "Number of segments:", np.max(img_segmented)
In [ ]:
#image date 6/21/18
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104001003EB8F400')
bbox = env.inputs.get('bbox', '-122.63, 41.87, -122.43, 42.02')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
/anaconda/envs/gbdx_py2/lib/python2.7/site-packages/gbdxtools/images/meta.py:440: UserWarning: Image does not contain specified geometry (-122.63000000000001, 41.87, -122.43000000000002, 42.02) not in (-122.72730884, 41.22395433178225, -122.50609748534676, 42.02349145)
  warnings.warn(ae.args)

Spring Creek Fire - Colorado

  • 6/27/18
  • 108,045 acres
In [1]:
# 7/3/18
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104001003FB24500')
bbox = env.inputs.get('bbox', '-105.235, 37.585, -105.148, 37.638')
#bbox = env.inputs.get('bbox', '-105.31, 37.39, -105.00, 37.69')
#bbox = env.inputs.get('bbox', '-105.366, 37.362, -105.042, 37.612')

image = CatalogImage(catalog_id, band_type="MS", pansharpen=True, bbox=map(float, bbox.split(",")))
#image.plot(w=10, h=10)
In [2]:
image.ipe.metadata['image']['offNadirAngle']
Out[2]:
28.4
In [4]:
tiles = []
for x in range(0, image.shape[1], 256):
    for y in range(0,image.shape[2], 256):
        tiles.append(image[:,x:x+256,y:y+256])
In [5]:
tiles[len(tiles)/2].plot()

Segmentation

In [6]:
rgb = tiles[len(tiles)/2].rgb()
In [7]:
from skimage import transform, feature, segmentation, util, filters, exposure, morphology, data, io, measure, color, img_as_bool
In [8]:
img_segmented = segmentation.slic(rgb, n_segments=1000, compactness=10, sigma=1)
In [9]:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0) #keep same colors
cmap = matplotlib.colors.ListedColormap(np.random.rand(256,3))
plt.figure(figsize=(10,10))
plt.imshow(img_segmented, cmap=cmap)
print "Number of segments:", np.max(img_segmented)
Number of segments: 953
In [10]:
!pip install git+https://github.com/aalten77/nbburntbuildings.git@master -q
import nbburntbuildings
In [11]:
sp = plt.figure(figsize=(15,15))
nbburntbuildings.plot_array(segmentation.mark_boundaries(rgb, img_segmented), (1,1,1), title="Segmentation mask")
_ = plt.plot()
In [12]:
import random
tiles_random = random.sample(tiles, 61)
In [13]:
import tqdm
segmented_images = [segmentation.slic(tile.rgb(), n_segments=1000, compactness=10, sigma=1) for tile in tqdm.tqdm_notebook(tiles_random)]

In [57]:
print [np.max(segs)+1 for segs in segmented_images]
print "Total number of segments:", sum([np.max(segs)+1 for segs in segmented_images])
[911, 955, 947, 978, 949, 946, 971, 938, 964, 950, 955, 931, 938, 984, 929, 936, 935, 954, 935, 897, 999, 961, 932, 960, 922, 945, 994, 977, 941, 951, 1024, 947, 898, 895, 978, 1022, 961, 973, 1007, 968, 908, 966, 959, 900, 950, 910, 963, 962, 943, 929, 920, 921, 898, 990, 925, 958, 906, 961, 923, 1024, 995]
Total number of segments: 57969
In [58]:
len(segmented_images)
Out[58]:
61
In [59]:
import shapely
from shapely.geometry import Polygon, mapping, shape, MultiPolygon, box
from rasterio import features
In [60]:
segment_mask = segmented_images[0].astype(np.uint16)
In [61]:
list_of_shapes = []
In [62]:
for i, seg_img in enumerate(tqdm.tqdm_notebook(segmented_images)):
    segment_mask = seg_img.astype(np.uint16)
    list_of_shapes.append([(shapely.geometry.shape(g), v) for g, v in features.shapes(segment_mask, mask=None, transform=tiles_random[i].affine)])

In [63]:
print [len(segs) for segs in list_of_shapes]
print "Total number of shapes:", sum([len(segs) for segs in list_of_shapes])
[911, 955, 947, 978, 949, 946, 971, 938, 964, 950, 955, 931, 938, 984, 929, 936, 935, 954, 935, 897, 999, 961, 932, 960, 922, 945, 994, 977, 941, 951, 1024, 947, 898, 895, 978, 1022, 961, 973, 1007, 968, 908, 966, 959, 900, 950, 910, 963, 962, 943, 929, 920, 921, 898, 990, 925, 958, 906, 961, 923, 1024, 995]
Total number of shapes: 57969
In [64]:
len(list_of_shapes)
Out[64]:
61
In [65]:
type(list_of_shapes[0])
Out[65]:
list
In [348]:
def to_geojson(shapes_list):

    #append burn scar region polygons to geojson
    if type(shapes_list) == list:
        results = ({
            'type': 'Feature',
            'properties': {'raster_val': v, 'color': 'red'},
            'geometry': s.__geo_interface__}
            for i, (s, v)
            in enumerate(shapes_list))
    else:
        results = ({
            'type': 'Feature',
            'properties': {'raster_val': v, 'color': 'red'},
            'geometry': s}
            for i, (s, v)
            in enumerate(shapes_list))

    list_results = list(results)

    collection = {
        'type': 'FeatureCollection',
        'features': list_results, 
        'properties': {'catalog_id':'1030010078AA6A00', 'fire_name':'Thomas Fire', 'location':'Ventura, CA'},
        'crs': {'type':'EPSG', 'properties':{'code':4326}}
    }

    return collection
In [67]:
gj = to_geojson(list_of_shapes[0])
In [69]:
import json
for i, shapes in enumerate(list_of_shapes):
    gj = to_geojson(shapes)
    with open('./wildfire_geojsons/SpringCreekFire/SpringCreekFire_{}.json'.format(i), 'w') as f:
        json.dump(gj, f)
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-69-94579a75bd75> in <module>()
      1 import json
      2 for i, shapes in enumerate(list_of_shapes):
----> 3     gj = to_geojson(shapes)
      4     with open('./wildfire_geojsons/SpringCreekFire/SpringCreekFire_{}.json'.format(i), 'w') as f:
      5         json.dump(gj, f)

<ipython-input-66-d3b937c3b096> in to_geojson(shapes_list)
     17             in enumerate(shapes_list))
     18 
---> 19     list_results = list(results)
     20 
     21     collection = {

<ipython-input-66-d3b937c3b096> in <genexpr>((i, (s, v)))
      7             'properties': {'raster_val': v, 'color': 'red'},
      8             'geometry': s.__geo_interface__}
----> 9             for i, (s, v)
     10             in enumerate(shapes_list))
     11     else:

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/shapely/geometry/polygon.pyc in __geo_interface__(self)
    317         else:
    318             coords = [tuple(self.exterior.coords)]
--> 319             for hole in self.interiors:
    320                 coords.append(tuple(hole.coords))
    321         return {

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/shapely/geometry/polygon.pyc in interiors(self)
    260     @property
    261     def interiors(self):
--> 262         if self.is_empty:
    263             return []
    264         return InteriorRingSequence(self)

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/shapely/geometry/base.pyc in is_empty(self)
    641     def is_empty(self):
    642         """True if the set of points in this geometry is empty, else False"""
--> 643         return (self._geom is None) or bool(self.impl['is_empty'](self))
    644 
    645     @property

KeyboardInterrupt: 
In [131]:
!pwd
/Users/ai-linhalten/Desktop/Wildfires Pilot
In [119]:
len(shapes3)
Out[119]:
875
In [ ]:
# 7/3/18 - SWIR?
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104A01003FB24500')
bbox = env.inputs.get('bbox', '-105.366, 37.362, -105.042, 37.612')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [76]:
# 7/14/18
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '1030010081CC5E00')
bbox = env.inputs.get('bbox', '-105.31, 37.39, -105.00, 37.69')
#bbox = env.inputs.get('bbox', '-105.366, 37.362, -105.042, 37.612')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-76-47e7b644d478> in <module>()
     10 
     11 image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
---> 12 image.plot(w=10, h=10)

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/mixins/geo.pyc in plot(self, spec, **kwargs)
     63                 self._plot(tfm=self.base_layer_match, **kwargs)
     64             else:
---> 65                 self._plot(tfm=getattr(self, spec), **kwargs)
     66 
     67     def _has_token(self, **kwargs):

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/mixins/geo.pyc in _plot(self, tfm, **kwargs)
     77         f, ax1 = plt.subplots(1, figsize=(kwargs.get("w", 10), kwargs.get("h", 10)))
     78         ax1.axis('off')
---> 79         plt.imshow(tfm(**kwargs), interpolation='nearest', cmap=kwargs.get("cmap", None))
     80         plt.show(block=False)
     81 

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/mixins/geo.pyc in rgb(self, **kwargs)
     38         else:
     39             use_bands = self._rgb_bands
---> 40         data = self._read(self[use_bands,...], **kwargs)
     41         data = np.rollaxis(data.astype(np.float32), 0, 3)
     42         lims = np.percentile(data, kwargs.get("stretch", [2, 98]), axis=(0, 1))

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/mixins/geo.pyc in _read(self, data, **kwargs)
     82     def _read(self, data, **kwargs):
     83         if hasattr(data, 'read'):
---> 84             return data.read(**kwargs)
     85         else:
     86             return data.compute(get=threaded_get)

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/ipe_image.pyc in read(self, bands, quiet, **kwargs)
    160         if not quiet:
    161             print('Fetching Image... {} {}'.format(self.ntiles, 'tiles' if self.ntiles > 1 else 'tile'))
--> 162         return super(IpeImage, self).read(bands=bands)

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/meta.pyc in read(self, bands, **kwargs)
     85         if bands is not None:
     86             arr = self[bands, ...]
---> 87         return arr.compute(get=threaded_get)
     88 
     89     def randwindow(self, window_shape):

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/dask/base.pyc in compute(self, **kwargs)
    154         dask.base.compute
    155         """
--> 156         (result,) = compute(self, traverse=False, **kwargs)
    157         return result
    158 

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/dask/base.pyc in compute(*args, **kwargs)
    400     keys = [x.__dask_keys__() for x in collections]
    401     postcomputes = [x.__dask_postcompute__() for x in collections]
--> 402     results = schedule(dsk, keys, **kwargs)
    403     return repack([f(r, *a) for r, (f, a) in zip(results, postcomputes)])
    404 

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/dask/threaded.pyc in get(dsk, result, cache, num_workers, **kwargs)
     73     results = get_async(pool.apply_async, len(pool._pool), dsk, result,
     74                         cache=cache, get_id=_thread_get_id,
---> 75                         pack_exception=pack_exception, **kwargs)
     76 
     77     # Cleanup pools associated to dead threads

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/dask/local.pyc in get_async(apply_async, num_workers, dsk, result, cache, get_id, rerun_exceptions_locally, pack_exception, raise_exception, callbacks, dumps, loads, **kwargs)
    510             # Main loop, wait on tasks to finish, insert new ones
    511             while state['waiting'] or state['ready'] or state['running']:
--> 512                 key, res_info, failed = queue_get(queue)
    513                 if failed:
    514                     exc, tb = loads(res_info)

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/dask/local.pyc in queue_get(q)
    134     # For more information see: https://bugs.python.org/issue1360
    135     def queue_get(q):
--> 136         return q.get(block=True, timeout=(365 * 24 * 60 * 60))
    137 
    138 elif os.name == 'nt':

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/Queue.pyc in get(self, block, timeout)
    175                     if remaining <= 0.0:
    176                         raise Empty
--> 177                     self.not_empty.wait(remaining)
    178             item = self._get()
    179             self.not_full.notify()

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/threading.pyc in wait(self, timeout)
    357                         break
    358                     delay = min(delay * 2, remaining, .05)
--> 359                     _sleep(delay)
    360                 if not gotit:
    361                     if __debug__:

KeyboardInterrupt: 

Martin - Nevada

  • 7/5/18
  • 435,569 acres
In [2]:
# 7/14/18 - off nadir = 51 clouds 75%?
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104001003F4FEC00')
bbox = env.inputs.get('bbox', '-117.678, 41.522, -117.369, 41.732')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/gbdxtools/images/meta.py:440: UserWarning: Image does not contain specified geometry (-117.67799999999998, 41.522, -117.36899999999999, 41.732) not in (-117.54298103, 41.2654324284046, -117.23845906629178, 41.83276775)
  warnings.warn(ae.args)
In [ ]:
# 7/14/18 - SWIR?
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104A01003F4FEC00')
bbox = env.inputs.get('bbox', '-117.678, 41.522, -117.369, 41.732')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)

Cemetery - Oregon

  • 7/16/18
  • 1,414 acres
In [1]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '103001007F9C2F00')
bbox = env.inputs.get('bbox', '-120.22, 44.05, -120.16, 44.09')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/gbdxtools/images/meta.py:440: UserWarning: Image does not contain specified geometry (-120.22, 44.05, -120.16000000000001, 44.09) not in (-120.15338642, 42.9910313090406, -119.93292978148042, 44.01354782)
  warnings.warn(ae.args)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-8dea9a505c1e> in <module>()
      7 
      8 image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
----> 9 image.plot(w=10, h=10)

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/gbdxtools/images/mixins/geo.py in plot(self, spec, **kwargs)
    137         else:
    138             if spec == "rgb" and self._has_token(**kwargs):
--> 139                 self._plot(tfm=self.rgb, **kwargs)
    140             else:
    141                 self._plot(tfm=getattr(self, spec), **kwargs)

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/gbdxtools/images/mixins/geo.py in _plot(self, tfm, **kwargs)
    154         ax1.axis('off')
    155         ax1.set_title(kwargs.get('title', ''), fontsize=kwargs.get('fontsize', 22))
--> 156         plt.imshow(tfm(**kwargs), interpolation='nearest', cmap=kwargs.get("cmap", None))
    157         plt.show(block=False)
    158 

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/gbdxtools/images/mixins/geo.py in rgb(self, **kwargs)
     32             if "stretch" not in kwargs:
     33                 kwargs['stretch'] = [2,98]
---> 34             return self.histogram_stretch(use_bands, **kwargs)
     35         elif kwargs["histogram"] == "equalize":
     36             return self.histogram_equalize(use_bands, **kwargs)

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/gbdxtools/images/mixins/geo.py in histogram_stretch(self, use_bands, **kwargs)
     86     def histogram_stretch(self, use_bands, **kwargs):
     87         ''' entry point for contrast stretching '''
---> 88         data = self._read(self[use_bands,...], **kwargs)
     89         data = np.rollaxis(data.astype(np.float32), 0, 3)
     90         return self._histogram_stretch(data, **kwargs)

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/gbdxtools/images/mixins/geo.py in _read(self, data, **kwargs)
    159     def _read(self, data, **kwargs):
    160         if hasattr(data, 'read'):
--> 161             return data.read(**kwargs)
    162         else:
    163             return data.compute(get=threaded_get)

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/gbdxtools/images/rda_image.py in read(self, bands, quiet, **kwargs)
    161         if not quiet:
    162             print('Fetching Image... {} {}'.format(self.ntiles, 'tiles' if self.ntiles > 1 else 'tile'))
--> 163         return super(RDAImage, self).read(bands=bands)

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/gbdxtools/images/meta.py in read(self, bands, **kwargs)
     85         if bands is not None:
     86             arr = self[bands, ...]
---> 87         return arr.compute(get=threaded_get)
     88 
     89     def randwindow(self, window_shape):

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/base.py in compute(self, **kwargs)
    154         dask.base.compute
    155         """
--> 156         (result,) = compute(self, traverse=False, **kwargs)
    157         return result
    158 

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/base.py in compute(*args, **kwargs)
    398     keys = [x.__dask_keys__() for x in collections]
    399     postcomputes = [x.__dask_postcompute__() for x in collections]
--> 400     results = schedule(dsk, keys, **kwargs)
    401     return repack([f(r, *a) for r, (f, a) in zip(results, postcomputes)])
    402 

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/threaded.py in get(dsk, result, cache, num_workers, **kwargs)
     73     results = get_async(pool.apply_async, len(pool._pool), dsk, result,
     74                         cache=cache, get_id=_thread_get_id,
---> 75                         pack_exception=pack_exception, **kwargs)
     76 
     77     # Cleanup pools associated to dead threads

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/local.py in get_async(apply_async, num_workers, dsk, result, cache, get_id, rerun_exceptions_locally, pack_exception, raise_exception, callbacks, dumps, loads, **kwargs)
    519                         _execute_task(task, data)  # Re-execute locally
    520                     else:
--> 521                         raise_exception(exc, tb)
    522                 res, worker_id = loads(res_info)
    523                 state['cache'][key] = res

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/compatibility.py in reraise(exc, tb)
     66         if exc.__traceback__ is not tb:
     67             raise exc.with_traceback(tb)
---> 68         raise exc
     69 
     70 else:

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/local.py in execute_task(key, task_info, dumps, loads, get_id, pack_exception)
    288     try:
    289         task, data = loads(task_info)
--> 290         result = _execute_task(task, data)
    291         id = get_id()
    292         result = dumps((result, id))

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/local.py in _execute_task(arg, cache, dsk)
    268     elif istask(arg):
    269         func, args = arg[0], arg[1:]
--> 270         args2 = [_execute_task(a, cache) for a in args]
    271         return func(*args2)
    272     elif not ishashable(arg):

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/local.py in <listcomp>(.0)
    268     elif istask(arg):
    269         func, args = arg[0], arg[1:]
--> 270         args2 = [_execute_task(a, cache) for a in args]
    271         return func(*args2)
    272     elif not ishashable(arg):

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/local.py in _execute_task(arg, cache, dsk)
    268     elif istask(arg):
    269         func, args = arg[0], arg[1:]
--> 270         args2 = [_execute_task(a, cache) for a in args]
    271         return func(*args2)
    272     elif not ishashable(arg):

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/local.py in <listcomp>(.0)
    268     elif istask(arg):
    269         func, args = arg[0], arg[1:]
--> 270         args2 = [_execute_task(a, cache) for a in args]
    271         return func(*args2)
    272     elif not ishashable(arg):

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/local.py in _execute_task(arg, cache, dsk)
    265     """
    266     if isinstance(arg, list):
--> 267         return [_execute_task(a, cache) for a in arg]
    268     elif istask(arg):
    269         func, args = arg[0], arg[1:]

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/local.py in <listcomp>(.0)
    265     """
    266     if isinstance(arg, list):
--> 267         return [_execute_task(a, cache) for a in arg]
    268     elif istask(arg):
    269         func, args = arg[0], arg[1:]

/anaconda/envs/gbdx_py3/lib/python3.6/site-packages/dask/local.py in _execute_task(arg, cache, dsk)
    269         func, args = arg[0], arg[1:]
    270         args2 = [_execute_task(a, cache) for a in args]
--> 271         return func(*args2)
    272     elif not ishashable(arg):
    273         return arg

TypeError: tuple indices must be integers or slices, not tuple
In [1]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '103001007F214F00')
bbox = env.inputs.get('bbox', '-120.392, 43.895, -120.048, 44.231')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
#image.plot(w=10, h=10)
/anaconda/envs/gbdx_py2/lib/python2.7/site-packages/gbdxtools/images/meta.py:440: UserWarning: Image does not contain specified geometry (-120.39199999999998, 43.895, -120.04799999999999, 44.231) not in (-120.15468683, 42.9770714970751, -119.93232121735178, 44.02182792)
  warnings.warn(ae.args)

Dollar Ridge - Utah

  • 7/1/18
  • 56,747 acres
In [5]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104001003F384F00')
bbox = env.inputs.get('bbox', '-111.055, 40.036, -110.903, 40.136')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [6]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104A01003F384F00')
bbox = env.inputs.get('bbox', '-111.055, 40.036, -110.903, 40.136')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [7]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104001003F762100')
bbox = env.inputs.get('bbox', '-111.055, 40.036, -110.903, 40.136')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [8]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104A01003F762100')
bbox = env.inputs.get('bbox', '-111.055, 40.036, -110.903, 40.136')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)

Old fires

Thomas Fire - SoCal (Santa Barbara)

  • 12/4/17 - 1/12/18
In [335]:
catalog_id = env.inputs.get('catalog_id', '1030010078AA6A00')
bbox = (-119.307, 34.283, -119.283, 34.345) #north ventura ave
#bbox = (-119.298, 34.276, -119.171, 34.338)

image = CatalogImage(catalog_id, pansharpen=True, band_type="MS", bbox=bbox)
image_unsharp = CatalogImage(catalog_id, band_type="MS", bbox=bbox)
image_unsharp.plot(w=10, h=10)
In [336]:
image.shape
Out[336]:
(8, 14320, 5542)
In [337]:
tiles = []
for x in range(0, image.shape[1], 512):
    for y in range(0,image.shape[2], 512):
        tiles.append(image[:,x:x+512,y:y+512])
In [338]:
len(tiles)
Out[338]:
308
In [339]:
tiles[150].plot()
In [340]:
rgb = tiles[150].rgb()
In [341]:
img_segmented = segmentation.slic(rgb, n_segments=1500, compactness=10, sigma=1)
In [342]:
np.random.seed(0) #keep same colors
cmap = matplotlib.colors.ListedColormap(np.random.rand(256,3))
plt.figure(figsize=(10,10))
plt.imshow(img_segmented, cmap=cmap)
print "Number of segments:", np.max(img_segmented)
Number of segments: 1350
In [343]:
sp = plt.figure(figsize=(15,15))
nbburntbuildings.plot_array(segmentation.mark_boundaries(rgb, img_segmented), (1,1,1), title="Segmentation mask")
_ = plt.plot()
In [344]:
import random
tiles_random = random.sample(tiles, int(len(tiles)*0.25))
In [345]:
import tqdm
segmented_images = [segmentation.slic(tile.rgb(), n_segments=1500, compactness=10, sigma=1) for tile in tqdm.tqdm_notebook(tiles_random)]
In [346]:
list_of_shapes = []
In [347]:
for i, seg_img in enumerate(tqdm.tqdm_notebook(segmented_images)):
    segment_mask = seg_img.astype(np.uint16)
    list_of_shapes.append([(shapely.geometry.shape(g), v) for g, v in features.shapes(segment_mask, mask=None, transform=tiles_random[i].affine)])
In [349]:
import json
for i, shapes in enumerate(list_of_shapes):
    gj = to_geojson(shapes)
    with open('./wildfire_geojsons/ThomasFire/ThomasFire_NVenturaAve_2018-01-21_{}.json'.format(i), 'w') as f:
        json.dump(gj, f)
In [ ]:
print image.ipe.metadata['image']['acquisitionDate']
print image.ipe.metadata['image']['offNadirAngle']
In [42]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '1040010037B72800')
bbox = env.inputs.get('bbox', '-119.526, 34.328, -119.183, 34.518')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [169]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '103001007430ED00')
bbox = env.inputs.get('bbox', '-119.526, 34.328, -119.183, 34.518')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-169-c3337a2c789e> in <module>()
      7 
      8 image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
----> 9 image.plot(w=10, h=10)

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/mixins/geo.pyc in plot(self, spec, **kwargs)
     63                 self._plot(tfm=self.base_layer_match, **kwargs)
     64             else:
---> 65                 self._plot(tfm=getattr(self, spec), **kwargs)
     66 
     67     def _has_token(self, **kwargs):

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/mixins/geo.pyc in _plot(self, tfm, **kwargs)
     77         f, ax1 = plt.subplots(1, figsize=(kwargs.get("w", 10), kwargs.get("h", 10)))
     78         ax1.axis('off')
---> 79         plt.imshow(tfm(**kwargs), interpolation='nearest', cmap=kwargs.get("cmap", None))
     80         plt.show(block=False)
     81 

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/mixins/geo.pyc in rgb(self, **kwargs)
     38         else:
     39             use_bands = self._rgb_bands
---> 40         data = self._read(self[use_bands,...], **kwargs)
     41         data = np.rollaxis(data.astype(np.float32), 0, 3)
     42         lims = np.percentile(data, kwargs.get("stretch", [2, 98]), axis=(0, 1))

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/mixins/geo.pyc in _read(self, data, **kwargs)
     82     def _read(self, data, **kwargs):
     83         if hasattr(data, 'read'):
---> 84             return data.read(**kwargs)
     85         else:
     86             return data.compute(get=threaded_get)

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/ipe_image.pyc in read(self, bands, quiet, **kwargs)
    160         if not quiet:
    161             print('Fetching Image... {} {}'.format(self.ntiles, 'tiles' if self.ntiles > 1 else 'tile'))
--> 162         return super(IpeImage, self).read(bands=bands)

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/gbdxtools/images/meta.pyc in read(self, bands, **kwargs)
     85         if bands is not None:
     86             arr = self[bands, ...]
---> 87         return arr.compute(get=threaded_get)
     88 
     89     def randwindow(self, window_shape):

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/dask/base.pyc in compute(self, **kwargs)
    154         dask.base.compute
    155         """
--> 156         (result,) = compute(self, traverse=False, **kwargs)
    157         return result
    158 

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/dask/base.pyc in compute(*args, **kwargs)
    400     keys = [x.__dask_keys__() for x in collections]
    401     postcomputes = [x.__dask_postcompute__() for x in collections]
--> 402     results = schedule(dsk, keys, **kwargs)
    403     return repack([f(r, *a) for r, (f, a) in zip(results, postcomputes)])
    404 

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/dask/threaded.pyc in get(dsk, result, cache, num_workers, **kwargs)
     73     results = get_async(pool.apply_async, len(pool._pool), dsk, result,
     74                         cache=cache, get_id=_thread_get_id,
---> 75                         pack_exception=pack_exception, **kwargs)
     76 
     77     # Cleanup pools associated to dead threads

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/dask/local.pyc in get_async(apply_async, num_workers, dsk, result, cache, get_id, rerun_exceptions_locally, pack_exception, raise_exception, callbacks, dumps, loads, **kwargs)
    473             dsk, dependencies = cull(dsk, list(results))
    474 
--> 475             keyorder = order(dsk)
    476 
    477             state = start_state_from_dask(dsk, cache=cache, sortkey=keyorder.get)

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/dask/order.pyc in order(dsk, dependencies)
    127             seen.add(item)
    128             if len(deps) < 1000:
--> 129                 deps = sorted(deps, key=dependencies_key)
    130             stack.extend(deps)
    131             continue

/Users/ai-linhalten/anaconda2/envs/gbdxtools/lib/python2.7/site-packages/dask/order.pyc in dependencies_key(x)
     99     waiting = {k: set(v) for k, v in dependencies.items()}
    100 
--> 101     def dependencies_key(x):
    102         return total_dependencies.get(x, 0), ReverseStrComparable(x)
    103 

KeyboardInterrupt: 
In [ ]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '10300100742EFD00')
bbox = env.inputs.get('bbox', '-119.526, 34.328, -119.183, 34.518')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [ ]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '1040010038C48400')
bbox = env.inputs.get('bbox', '-119.526, 34.328, -119.183, 34.518')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [ ]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '10400100396E7200')
bbox = env.inputs.get('bbox', '-119.526, 34.328, -119.183, 34.518')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [ ]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '103001007FC47500')
bbox = env.inputs.get('bbox', '-119.526, 34.328, -119.183, 34.518')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)

Whittier Fire - Los Padres National Forest, Santa Barbara County, CA

  • 7/8/17 - 10/5/17
  • 18,430 acres
In [301]:
catalog_id = env.inputs.get('catalog_id', '1040010036A01800') # off-nadir 29, 1/13/18
bbox = ( -119.994, 34.461, -119.865, 34.603) 

image = CatalogImage(catalog_id, pansharpen=True, band_type="MS", bbox=bbox)
#image_unsharp = CatalogImage(catalog_id, band_type="MS", bbox=bbox)
#image_unsharp.plot(w=10, h=10)
In [302]:
image.shape
Out[302]:
(8, 42041, 38192)
In [310]:
tiles = []
for x in range(0, image.shape[1], 1024):
    for y in range(0,image.shape[2], 1024):
        tiles.append(image[:,x:x+1024,y:y+1024])
In [311]:
len(tiles)
Out[311]:
1596
In [315]:
tiles[1000].plot()
In [316]:
rgb = tiles[1000].rgb()
In [317]:
img_segmented = segmentation.slic(rgb, n_segments=3000, compactness=10, sigma=1)
In [318]:
np.random.seed(0) #keep same colors
cmap = matplotlib.colors.ListedColormap(np.random.rand(256,3))
plt.figure(figsize=(10,10))
plt.imshow(img_segmented, cmap=cmap)
print "Number of segments:", np.max(img_segmented)
Number of segments: 2299
In [320]:
sp = plt.figure(figsize=(15,15))
nbburntbuildings.plot_array(segmentation.mark_boundaries(rgb, img_segmented), (1,1,1), title="Segmentation mask")
_ = plt.plot()
In [329]:
import random
tiles_random = random.sample(tiles, int(len(tiles)*0.05))
In [330]:
import tqdm
segmented_images = [segmentation.slic(tile.rgb(), n_segments=3000, compactness=10, sigma=1) for tile in tqdm.tqdm_notebook(tiles_random)]
In [331]:
list_of_shapes = []
In [332]:
for i, seg_img in enumerate(tqdm.tqdm_notebook(segmented_images)):
    segment_mask = seg_img.astype(np.uint16)
    list_of_shapes.append([(shapely.geometry.shape(g), v) for g, v in features.shapes(segment_mask, mask=None, transform=tiles_random[i].affine)])
In [334]:
import json
for i, shapes in enumerate(list_of_shapes):
    gj = to_geojson(shapes)
    with open('./wildfire_geojsons/WhittierFire/WhittierFire_2018-01-13_{}.json'.format(i), 'w') as f:
        json.dump(gj, f)

October 2017 Northern California Fires

Tubbs and Nuns

In [70]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104001003473E900')
bbox = env.inputs.get('bbox', '-122.758, 38.47, -122.741, 38.485')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [72]:
print image.ipe.metadata['image']['acquisitionDate']
print image.ipe.metadata['image']['offNadirAngle']
2017-10-12T19:24:15.860Z
23.9
In [161]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '1040010038A0A900')

bbox = env.inputs.get('bbox', '-122.711, 38.476, -122.686, 38.494') #fountaingrove - big
#bbox = env.inputs.get('bbox', '-122.705, 38.477, -122.698, 38.489') #fountaingrove - small
#bbox = env.inputs.get('bbox', '-122.758, 38.47, -122.741, 38.485')#coffey park

image = CatalogImage(catalog_id, pansharpen=True, band_type="MS", bbox=map(float, bbox.split(",")))
image_unsharp = CatalogImage(catalog_id, band_type="MS", bbox=map(float,bbox.split(",")))
image_unsharp.plot(w=10, h=10)
In [162]:
rgb = image.rgb()
In [163]:
img_segmented = segmentation.slic(rgb, n_segments=3000, compactness=10, sigma=1)
In [164]:
np.random.seed(0) #keep same colors
cmap = matplotlib.colors.ListedColormap(np.random.rand(256,3))
plt.figure(figsize=(10,10))
plt.imshow(img_segmented, cmap=cmap)
print "Number of segments:", np.max(img_segmented)
Number of segments: 1491
In [165]:
sp = plt.figure(figsize=(15,15))
nbburntbuildings.plot_array(segmentation.mark_boundaries(rgb, img_segmented, outline_color=(255, 255, 0)), (1,1,1), title="Segmentation mask")
_ = plt.plot()
In [166]:
binary_bool = img_segmented.astype(np.uint16)

#simplify geometries before storing as shapes 
shapes3 = [(shapely.geometry.shape(g), v) for g, v in features.shapes(binary_bool, mask=None, transform=image.affine)]
In [167]:
gj = to_geojson(shapes3)
In [131]:
!pwd
/Users/ai-linhalten/Desktop/Wildfires Pilot
In [168]:
with open('./wildfire_geojsons/October2017NorthernCaliforniaFires/Tubbs/Fountaingrove.json', 'w') as f:
    json.dump(gj, f)
In [74]:
print image.ipe.metadata['image']['acquisitionDate']
print image.ipe.metadata['image']['offNadirAngle']
2018-02-02T19:31:53.929Z
13.3
In [ ]:
#bbox = (-122.705, 38.477, -122.698, 38.489)
In [3]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104A010033B40500')
bbox = env.inputs.get('bbox', '-122.761, 38.464, -122.666, 38.574')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
/anaconda/envs/gbdx_py2/lib/python2.7/site-packages/gbdxtools/images/meta.py:440: UserWarning: Image does not contain specified geometry (-122.76100000000001, 38.464, -122.66599999999998, 38.574) not in (-122.68146928, 38.44693769167445, -122.53753164076177, 38.69909071)
  warnings.warn(ae.args)
In [ ]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '10400100391B4800')
bbox = env.inputs.get('bbox', '-122.535, 38.332, -122.466, 38.408')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
/anaconda/envs/gbdx_py2/lib/python2.7/site-packages/gbdxtools/images/meta.py:440: UserWarning: Image does not contain specified geometry (-122.53500000000001, 38.332, -122.466, 38.408) not in (-122.53150316, 38.331991078257275, -122.37831119090191, 38.48052313)
  warnings.warn(ae.args)
In [ ]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104001003883FB00')
bbox = env.inputs.get('bbox', '-122.535, 38.332, -122.466, 38.408')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
/anaconda/envs/gbdx_py2/lib/python2.7/site-packages/gbdxtools/images/meta.py:440: UserWarning: Image does not contain specified geometry (-122.53500000000001, 38.332, -122.466, 38.408) not in (-122.66289909, 38.33340033896155, -122.51216304975566, 38.47962851)
  warnings.warn(ae.args)

2017 Montana Fires - Rice Ridge Fire

In [ ]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '1040010030488100')
bbox = env.inputs.get('bbox', '-113.565, 47.157, -113.304, 47.352')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
/anaconda/envs/gbdx_py2/lib/python2.7/site-packages/gbdxtools/images/meta.py:440: UserWarning: Image does not contain specified geometry (-113.565, 47.157000000000004, -113.304, 47.352) not in (-113.7015547, 46.99435427270571, -113.52441206615164, 47.20113018)
  warnings.warn(ae.args)
In [ ]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104A010030488100')
bbox = env.inputs.get('bbox', '-113.565, 47.157, -113.304, 47.352')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [ ]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '1040010030B22500')
bbox = env.inputs.get('bbox', '-113.565, 47.157, -113.304, 47.352')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [ ]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '104A010030B22500')
bbox = env.inputs.get('bbox', '-113.565, 47.157, -113.304, 47.352')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)

Waldo Canyon Fire - Colorado

  • 6/23/12 - 7/10/12
  • WV02 images
In [178]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '1030010020C26600')
bbox = env.inputs.get('bbox', '-104.946, 38.877, -104.847, 38.979')

image = CatalogImage(catalog_id, pansharpen=True, band_type="MS", bbox=map(float, bbox.split(",")))
image_unsharp = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image_unsharp.plot(w=10, h=10)
In [179]:
tiles = []
for x in range(0, image.shape[1], 512):
    for y in range(0,image.shape[2], 512):
        tiles.append(image[:,x:x+512,y:y+512])
In [182]:
tiles[0].plot()
In [183]:
rgb_temp = tiles[0].rgb()
In [184]:
img_segmented = segmentation.slic(rgb_temp, n_segments=1000, compactness=10, sigma=1)
In [185]:
np.random.seed(0) #keep same colors
cmap = matplotlib.colors.ListedColormap(np.random.rand(256,3))
plt.figure(figsize=(10,10))
plt.imshow(img_segmented, cmap=cmap)
print "Number of segments:", np.max(img_segmented)
Number of segments: 858
In [186]:
sp = plt.figure(figsize=(15,15))
nbburntbuildings.plot_array(segmentation.mark_boundaries(rgb_temp, img_segmented), (1,1,1), title="Segmentation mask")
_ = plt.plot()
In [191]:
import random
tiles_random = random.sample(tiles, 75)
In [192]:
import tqdm
segmented_images = [segmentation.slic(tile.rgb(), n_segments=1000, compactness=10, sigma=1) for tile in tqdm.tqdm_notebook(tiles_random)]
In [194]:
list_of_shapes = []
In [195]:
for i, seg_img in enumerate(tqdm.tqdm_notebook(segmented_images)):
    segment_mask = seg_img.astype(np.uint16)
    list_of_shapes.append([(shapely.geometry.shape(g), v) for g, v in features.shapes(segment_mask, mask=None, transform=tiles_random[i].affine)])
In [196]:
import json
for i, shapes in enumerate(list_of_shapes):
    gj = to_geojson(shapes)
    with open('./wildfire_geojsons/WaldoCanyonFire/WaldoCanyonFire_2013-03-07_{}.json'.format(i), 'w') as f:
        json.dump(gj, f)
In [180]:
print image.shape
print image.ipe.metadata['image']['acquisitionDate']
print image.ipe.metadata['image']['offNadirAngle']
(8, 22985, 22309)
2013-03-07T18:27:50.881Z
14.8
In [7]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '103001001C6E7600')
bbox = env.inputs.get('bbox', '-104.946, 38.877, -104.847, 38.979')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [197]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '103001001A4D9400')
bbox = env.inputs.get('bbox', '-104.946, 38.877, -104.847, 38.979')

image = CatalogImage(catalog_id, pansharpen=True, band_type="MS", bbox=map(float, bbox.split(",")))
image_unsharp = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image_unsharp.plot(w=10, h=10)
In [198]:
tiles = []
for x in range(0, image.shape[1], 512):
    for y in range(0,image.shape[2], 512):
        tiles.append(image[:,x:x+512,y:y+512])
In [204]:
len(tiles)
Out[204]:
1406
In [199]:
tiles[0].plot()
In [200]:
rgb_temp = tiles[0].rgb()
In [201]:
img_segmented = segmentation.slic(rgb_temp, n_segments=1000, compactness=10, sigma=1)
In [202]:
np.random.seed(0) #keep same colors
cmap = matplotlib.colors.ListedColormap(np.random.rand(256,3))
plt.figure(figsize=(10,10))
plt.imshow(img_segmented, cmap=cmap)
print "Number of segments:", np.max(img_segmented)
Number of segments: 765
In [203]:
sp = plt.figure(figsize=(15,15))
nbburntbuildings.plot_array(segmentation.mark_boundaries(rgb_temp, img_segmented), (1,1,1), title="Segmentation mask")
_ = plt.plot()
In [205]:
import random
tiles_random = random.sample(tiles, 75)
In [206]:
import tqdm
segmented_images = [segmentation.slic(tile.rgb(), n_segments=1000, compactness=10, sigma=1) for tile in tqdm.tqdm_notebook(tiles_random)]
In [207]:
list_of_shapes = []
In [208]:
for i, seg_img in enumerate(tqdm.tqdm_notebook(segmented_images)):
    segment_mask = seg_img.astype(np.uint16)
    list_of_shapes.append([(shapely.geometry.shape(g), v) for g, v in features.shapes(segment_mask, mask=None, transform=tiles_random[i].affine)])
In [209]:
import json
for i, shapes in enumerate(list_of_shapes):
    gj = to_geojson(shapes)
    with open('./wildfire_geojsons/WaldoCanyonFire/WaldoCanyonFire_2012-07-04_{}.json'.format(i), 'w') as f:
        json.dump(gj, f)
In [175]:
print image.shape
print image.ipe.metadata['image']['acquisitionDate']
print image.ipe.metadata['image']['offNadirAngle']
(8, 19278, 18711)
2012-07-04T17:57:59.914Z
28.9
In [176]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '1030010025B48D00')
bbox = env.inputs.get('bbox', '-104.946, 38.877, -104.847, 38.979')

image = CatalogImage(catalog_id, pansharpen=True, band_type="MS", bbox=map(float, bbox.split(",")))
image_unsharp = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image_unsharp.plot(w=10, h=10)
In [177]:
print image.shape
print image.ipe.metadata['image']['acquisitionDate']
print image.ipe.metadata['image']['offNadirAngle']
(8, 21303, 20676)
2013-07-18T18:28:54.111Z
21.9
In [1]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '103001001A146800')
bbox = env.inputs.get('bbox', '-104.946, 38.877, -104.847, 38.979')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)

Bastrop County Fire - Texas

  • 9/4/11 - 10/10/11
  • WV02 images
In [218]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '1030010020881E00')
bbox = env.inputs.get('bbox', '-97.303, 30.064, -97.175, 30.243')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
In [221]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '103001000D400700')
bbox = env.inputs.get('bbox', '-97.2677997, 30.064, -97.175, 30.243')

image = CatalogImage(catalog_id, pansharpen=True, band_type="MS", bbox=map(float, bbox.split(",")))
image_unsharp = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image_unsharp.plot(w=10, h=10)
In [223]:
tiles = []
for x in range(0, image.shape[1], 512):
    for y in range(0,image.shape[2], 512):
        tiles.append(image[:,x:x+512,y:y+512])
In [224]:
len(tiles)
Out[224]:
1829
In [252]:
tiles[850].plot()
In [253]:
import random
tiles_random = random.sample(tiles, 180)
In [254]:
import tqdm
segmented_images = [segmentation.slic(tile.rgb(), n_segments=1000, compactness=10, sigma=1) for tile in tqdm.tqdm_notebook(tiles_random)]
In [256]:
list_of_shapes = []
In [257]:
for i, seg_img in enumerate(tqdm.tqdm_notebook(segmented_images)):
    segment_mask = seg_img.astype(np.uint16)
    list_of_shapes.append([(shapely.geometry.shape(g), v) for g, v in features.shapes(segment_mask, mask=None, transform=tiles_random[i].affine)])
In [258]:
import json
for i, shapes in enumerate(list_of_shapes):
    gj = to_geojson(shapes)
    with open('./wildfire_geojsons/BastropCountyComplexFire/BastropCountyComplexFire_2011-09-07_{}.json'.format(i), 'w') as f:
        json.dump(gj, f)
In [222]:
print image.shape
print image.ipe.metadata['image']['acquisitionDate']
print image.ipe.metadata['image']['offNadirAngle']
(8, 30009, 15558)
2011-09-07T17:31:02.519Z
34.2
In [10]:
from gbdxtools.task import env
from gbdxtools import CatalogImage
%matplotlib inline

catalog_id = env.inputs.get('catalog_id', '103001000E868200')
bbox = env.inputs.get('bbox', '-97.294, 30.129, -97.17, 30.291')

image = CatalogImage(catalog_id, band_type="MS", bbox=map(float, bbox.split(",")))
image.plot(w=10, h=10)
/anaconda/envs/gbdx_py2/lib/python2.7/site-packages/gbdxtools/images/meta.py:440: UserWarning: Image does not contain specified geometry (-97.294, 30.129000000000005, -97.17, 30.291000000000004) not in (-97.393031, 30.19621989193676, -97.18404167193675, 30.93753422)
  warnings.warn(ae.args)